Store all cfgs in Compilation instead of features only
authorGleb Kozyrev <gleb@gkoz.com>
Sat, 10 Oct 2015 13:11:45 +0000 (16:11 +0300)
committerGleb Kozyrev <gleb@gkoz.com>
Sat, 10 Oct 2015 15:10:28 +0000 (18:10 +0300)
src/cargo/ops/cargo_rustc/compilation.rs
src/cargo/ops/cargo_rustc/mod.rs
src/cargo/ops/cargo_test.rs

index 758da67db32a06e1aa2353c0c18bdae88b5b0f9a..9e15288e434d1810e0d7ff93051404f934e5e469 100644 (file)
@@ -42,7 +42,7 @@ pub struct Compilation<'cfg> {
     pub to_doc_test: Vec<Package>,
 
     /// Features enabled during this compilation.
-    pub features: HashSet<String>,
+    pub cfgs: HashSet<String>,
 
     config: &'cfg Config,
 }
@@ -58,7 +58,7 @@ impl<'cfg> Compilation<'cfg> {
             binaries: Vec::new(),
             extra_env: HashMap::new(),
             to_doc_test: Vec::new(),
-            features: HashSet::new(),
+            cfgs: HashSet::new(),
             config: config,
         }
     }
index 91892918756878bd8305323fdd044d82bdc18b2c..fab000d179e618994251155e1b1be318d7107e92 100644 (file)
@@ -148,11 +148,17 @@ pub fn compile_targets<'a, 'cfg: 'a>(pkg_targets: &'a PackagesToBuild<'a>,
         }
     }
 
-    if let Some(feats) = cx.resolve.features(root.package_id()) {
-        cx.compilation.features.extend(feats.iter().cloned());
+    let root_pkg = root.package_id();
+    if let Some(feats) = cx.resolve.features(root_pkg) {
+        cx.compilation.cfgs.extend(feats.iter().map(|feat| {
+            format!("feature=\"{}\"", feat)
+        }));
     }
 
     for (&(ref pkg, _), output) in cx.build_state.outputs.lock().unwrap().iter() {
+        if pkg == root_pkg {
+            cx.compilation.cfgs.extend(output.cfgs.iter().cloned());
+        }
         let any_dylib = output.library_links.iter().any(|l| {
             !l.starts_with("static=") && !l.starts_with("framework=")
         });
index ff2b6b41739f000928820a0694a00e6fcc78c4b5..e443748314ac6eca42994b6f11232dd81e1ec1e8 100644 (file)
@@ -136,8 +136,8 @@ fn run_doc_tests(options: &TestOptions,
                 p.arg("--test-args").arg(&test_args.connect(" "));
             }
 
-            for feat in compilation.features.iter() {
-                p.arg("--cfg").arg(&format!("feature=\"{}\"", feat));
+            for cfg in compilation.cfgs.iter() {
+                p.arg("--cfg").arg(cfg);
             }
 
             for (_, libs) in compilation.libraries.iter() {